/*
 * @lc app=leetcode.cn id=1 lang=typescript
 *
 * [1] 两数之和
 */

// @lc code=start
function twoSum(nums: number[], target: number): number[] {

  // solution1
  // let s = 0;
  // let e = s + 1;
 
  // for (s; s < nums.length; s++) {
  //   for(e = s + 1; e < nums.length; e++) {
  //     if(nums[s] + nums[e] === target) {
  //       return [s, e]
  //     }
  //   }
  // }

  // solution2
  // let _map: any = {};

  // for (let i = 0; i < nums.length; i++) {
  //   const s = target - nums[i];
  //   if (_map[nums[i]] !== undefined) {
  //     return [_map[nums[i]], i];
  //   }
  //   if (_map[s] === undefined) {
  //     _map[s] = i;
  //   }
  // }

  // solution3
  let _map = new Map();
  for (let i = 0; i < nums.length; i++) {
    const left = target - nums[i];
    if (_map.has(left)) {
      return [_map.get(left), i];
    }
    _map.set(nums[i], i);
  }

  return []
};

console.log(twoSum([3,2,4], 6))
// @lc code=end

